//! # 观测性模块
//! 
//! 提供统一的观测性管理功能，集成指标收集、分布式追踪、日志记录等能力。
//! 采用面向接口编程设计，支持多种后端实现和灵活的配置管理。
//! 
//! ## 核心组件
//! 
//! - **traits**: 观测性核心接口定义
//! - **context**: 观测性上下文管理
//! - **config**: 配置管理
//! - **manager**: 统一管理器实现
//! - **tracing**: 分布式追踪处理器
//! - **logging**: 日志管理器
//! - **middleware**: 观测性中间件
//! 
//! ## 快速开始
//! 
//! ```rust
//! use rustcloud::observability::{ObservabilityConfig, ObservabilityManagerBuilder};
//! 
//! // 创建配置
//! let config = ObservabilityConfig::default();
//! 
//! // 构建管理器
//! let manager = ObservabilityManagerBuilder::new(config)
//!     .build();
//! 
//! // 启动管理器
//! manager.start().await?;
//! 
//! // 使用观测性功能
//! let context_id = manager.start_context("user-service".to_string(), "get_user".to_string()).await?;
//! manager.end_context(&context_id).await?;
//! ```

pub mod traits;
pub mod context;
pub mod config;
pub mod manager;
pub mod tracing;
pub mod logging;
pub mod middleware;

#[cfg(test)]
pub mod tests;

// 重新导出主要类型和函数
pub use traits::{
    ObservabilityManager, 
    TracingProcessor, 
    LogManager, 
    ObservabilityMetricsCollector,
    LogLevel
};

pub use context::{
    ObservabilityContext, 
    ContextManager, 
    ContextState, 
    ContextStats
};

pub use config::{
    ObservabilityConfig,
    SamplingConfig,
    ExportConfig,
    PerformanceConfig,
    MetricsConfig,
    TracingConfig,
    LoggingConfig,
    SamplingStrategy,
    LogFormat,
    LogOutput
};

pub use manager::{
    UnifiedObservabilityManager,
    ObservabilityManagerBuilder
};

/// 便捷宏：记录观测性指标
/// 
/// # 使用示例
/// 
/// ```rust
/// record_metric!(manager, "request_count", 1.0, {"service" => "user", "method" => "GET"});
/// ```
#[macro_export]
macro_rules! record_metric {
    ($manager:expr, $name:expr, $value:expr, {$($key:expr => $val:expr),*}) => {
        {
            let mut labels = std::collections::HashMap::new();
            $(
                labels.insert($key.to_string(), $val.to_string());
            )*
            $manager.record_counter($name, $value, labels).await
        }
    };
}

/// 便捷宏：包装观测性操作
/// 
/// 自动创建观测性上下文并记录操作结果。
/// 
/// # 使用示例
/// 
/// ```rust
/// let result = observe_operation!(manager, "user-service", "get_user", {
///     // 你的业务逻辑
///     Ok(user)
/// }).await?;
/// ```
#[macro_export]
macro_rules! observe_operation {
    ($manager:expr, $service:expr, $operation:expr, $body:expr) => {
        {
            let context_id = $manager.start_context($service.to_string(), $operation.to_string()).await?;
            
            let result = async { $body }.await;
            
            match &result {
                Ok(_) => {
                    $manager.end_context(&context_id).await?;
                }
                Err(error) => {
                    $manager.record_error(&context_id, &error.to_string()).await?;
                    $manager.end_context(&context_id).await?;
                }
            }
            
            result
        }
    };
}

/// 创建默认的观测性管理器
/// 
/// 使用默认配置创建一个基本的观测性管理器。
/// 
/// # 返回值
/// 配置好的观测性管理器实例
pub fn create_default_manager() -> UnifiedObservabilityManager {
    let config = ObservabilityConfig::default();
    ObservabilityManagerBuilder::new(config).build()
}

/// 创建带有自定义配置的观测性管理器
/// 
/// # 参数
/// * `config` - 自定义观测性配置
/// 
/// # 返回值
/// 配置好的观测性管理器实例
pub fn create_manager_with_config(config: ObservabilityConfig) -> UnifiedObservabilityManager {
    ObservabilityManagerBuilder::new(config).build()
}